﻿
// PaginationDlg.h: 头文件
//

#pragma once
#include <string>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <map>
#include <deque>
#include "Page.h"
#define MAX_PAGE_NUMBER 6
#define MAX_PAGE_SIZE 1024


// CPaginationDlg 对话框
class CPaginationDlg : public CDialogEx
{
	// 构造
public:
	CPaginationDlg(CWnd* pParent = nullptr);	// 标准构造函数

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_PAGINATION_DIALOG };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()

private:
	std::string str = "";		// 存储的所有数据
	std::string filePath;	// 文件路径

	CButton readButton;
	CButton saveButton;
	CButton addButton;
	CButton openButton;
	CEdit pageNumber;
	CEdit content;
	CComboBox pages;

	CString nowNewContent;	// 修改后的文本内容
	CString newPageContent; // 插入一页后，存储内容
	std::map<int, std::string> newContents;	//所有写入，但是没有存入文件中的string
	std::map<int, int> pageIndex; // 页表
	int nowPageIndex = 0;	// 现在选中的复选框的index
	std::deque<int> nowPages; // 现在在内存中的页面页号

	afx_msg void OnBnClickedReadButton();
	afx_msg void OnBnClickedSaveButton();
	afx_msg void OnBnClickedAddButton();
	afx_msg void OnBnClickedOpenButton();
	afx_msg void OnCbnSelchangeCombo1();
	afx_msg void OnEnChangeContentEdit();

	std::string& replace_all(std::string& src, const std::string& old_value, const std::string& new_value);
	void showPageNumbers();
	void usePage(int index);
	void paging();
	void insertData(int index, std::string s);
	void setNewData(int index, std::string s);
	void saveData();
public:
	afx_msg void OnClose();
};
